home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cli / DiskLED1.2.lha / DiskLED.S < prev    next >
Text File  |  2000-09-05  |  13KB  |  589 lines

  1. ;==============================================================================
  2. ; Created by: Per Johansson aka Olle / Latex 2000
  3. ;
  4. ; Remember: Use at own risk. :)               Compiled with: AsmPro V1.16d
  5. ;==============================================================================
  6.         incdir    Includes:
  7.  
  8.         include Exec/Exec_Lib.I
  9.  
  10.         include Dos/Dos_Lib.I
  11.  
  12.         include Intuition/Intuition_Lib.I
  13.  
  14.         include Graphics/Graphics_Lib.I
  15.  
  16.         include Libraries/Gadtools.I
  17.         include Libraries/Gadtools_Lib.I
  18.  
  19.         include Libraries/Reqtools.I
  20.         include Libraries/Reqtools_lib.i
  21.  
  22.         incdir    .Asm:Tools/DiskLED/    ; Remember to change path.
  23.         include    SysInit.i
  24. ;==============================================================================
  25. ;                 DiskLED V1.2
  26. ;==============================================================================
  27.         section    DiskLED,code_p
  28.  
  29. Start        bsr    OpenLibs
  30.         tst.l   d0
  31.             bne     .Nolibs
  32.         bsr    Read_Config
  33.         bsr     OpenWin0Window
  34.         tst.l   d0
  35.         bne     .NoWindow
  36.         bsr.w    Patch_Functions
  37. ;==================================================
  38. .MsgLoop    CALLGRAF WaitTOF
  39.         bsr.w    Check_Floppy
  40.         bsr.w    Check_PowerLED
  41.  
  42.         move.l  Win0,a1                    ; Get win address
  43.         move.l  Wd_UserPort(a1),a2         ; Get message port
  44.         move.l  a2,a0
  45.  
  46.         CALLEXEC GetMsg               ; Returns message in d0
  47.         tst.l   d0                         ; See if message arrived
  48.         beq     .MsgLoop                   ; If no message then wait for next
  49.  
  50.             move.l  d0,a1                      ; Put intuimessage in a1
  51.             move.l  im_Class(a1),d2            ; Get class
  52.             move.w  im_Code(a1),d3             ; Get code
  53.             move.l  im_IAddress(a1),a4         ; Get IAddress
  54.    
  55.             cmp.l    #IDCMP_REFRESHWINDOW,d2       ; Check Iconify-Gadget
  56.             bne    .Norefresh
  57.             bsr     Refresh_Window
  58. .Norefresh
  59.         cmp.l    #IDCMP_CLOSEWINDOW,d2       ; Quit if window closed
  60.         bne    .Noquit                     ; Remove when proper method implemented
  61.         move.l    #1,Done
  62. .Noquit         cmp.l    #IDCMP_MENUPICK,d2
  63.         bne.w    .Nomenupick
  64.         move.l    d3,d0                      ;  code into d0
  65.         jsr    ProcessMenuIDCMPNewMenu0
  66. .Nomenupick
  67.         CALLEXEC ReplyMsg           ; Return msg in A1
  68.         cmp.l    #1,done
  69.         bne.w    .MsgLoop           ; Loop until End
  70. ;==================================================
  71.         bsr.w    DePatch_Functions
  72.  
  73.         move.l  Win0,d0
  74.         tst.l   d0
  75.         beq     .NoWindow
  76.         jsr     CloseWin0Window
  77. .NoWindow    jsr     CloseLibs
  78. .NoLibs        rts
  79.  
  80.  
  81. ;==============================================================================
  82. ;         Functions for reading the config file.
  83. ;=============================================================\Read Config Init
  84. Read_Config
  85.         move.l    #ConfigFName,d1        ; File to open
  86.         bsr    _Dos_Openfile
  87.  
  88.         move.l    #configBuffer,d2    ; Pointer to buffer
  89.         move.l    #1024,d3        ; Size to read
  90.         bsr.w    _Dos_Read
  91.  
  92.         move.l    #'XPOS',d0
  93.         bsr.w    FindToken
  94.         bsr.w    Ascii2Dec
  95.         move.w    d0,XPos
  96.  
  97.         move.l    #'YPOS',d0
  98.         bsr.w    FindToken
  99.         bsr.w    Ascii2Dec        ; Store Decimal Value in (a1)
  100.         move.w    d0,YPos
  101.  
  102.         move.l    #'PUB=',d0        ; Read Publicname
  103.         bsr.w    FindToken
  104.         lea.l    PublicName,a1
  105.         move.l    #256-1,d7
  106. .Copy        cmp.b    #'"',(a0)
  107.         beq.w    .Fin
  108.         move.b    (a0)+,(a1)+
  109.         dbra    d7,.Copy
  110. .Fin        move.b    #0,(a1)+
  111.  
  112.         moveq.l    #0,d0
  113.         moveq.l    #0,d1
  114.         move.w    XPos(pc),d0
  115.         move.w    YPos(pc),d1
  116.         move.w    d0,Win0zoominfo
  117.         move.w    d1,Win0zoominfo+2
  118.         ext.l    d0
  119.         ext.l    d1
  120.         move.l    d0,Win0tags+4
  121.         move.l    d1,Win0tags+12
  122.  
  123. .Fail        bsr.w    _Dos_Closefile
  124.         rts
  125.  
  126.  
  127. ;========================================
  128. ; Ascii2Dec - Ascii to decimal converter
  129. ; IN:    A0 = Ascii Source
  130. ; OUT:  D0 = Decimal (.W)
  131. ;========================================
  132.  
  133. Ascii2Dec    moveq.l    #0,d0
  134.         move.b    (a0),d0
  135.         ext.w    d0
  136.         sub.w    #$30,d0
  137.         mulu    #1000,d0
  138.         moveq.l    #0,d1
  139.         move.b    1(a0),d1
  140.         ext.w    d1
  141.         sub.w    #$30,d1
  142.         mulu    #100,d1
  143.         moveq.l    #0,d2
  144.         move.b    2(a0),d2
  145.         ext.w    d2
  146.         sub.w    #$30,d2
  147.         mulu    #10,d2
  148.         moveq.l    #0,d3
  149.         move.b    3(a0),d3
  150.         ext.w    d2
  151.         sub.w    #$30,d3
  152.         add.w    d3,d2
  153.         add.w    d2,d1
  154.         add.w    d1,d0
  155.         rts
  156.  
  157. ;===================================
  158. ; IN:  D0 = Token
  159. ; OUT: A0 = Ptr to token values
  160. ;===================================
  161.  
  162. FindToken    lea.l    ConfigBuffer,a0
  163.         move.l    #1024-1,d7
  164. .Srch        cmp.l    (a0),d0
  165.         beq    .Fnd
  166.         addq.l    #1,a0
  167.         dbra    d7,.Srch
  168. .Fnd        addq.l    #5,a0
  169.         rts
  170.  
  171. ;==============================================================\Read Config End
  172.  
  173. Check_Floppy
  174.         cmp.w    #2,StatusFlg
  175.         beq.w    .Nodf0
  176.         move.l    d0,-(Sp)
  177.         moveq.l    #0,d0
  178.         move.b    Ciabprb,d0
  179.         btst    #7,d0
  180.         bne    .No
  181.         move.w    #%00110011,B2t
  182.         bra.w    .Ok
  183. .No        move.w    #%00110111,B2t
  184. .Ok        bsr.w    Refresh_Window
  185.         move.l    (Sp)+,d0
  186. .Nodf0        rts
  187.  
  188.  
  189. Check_PowerLED
  190.         move.l    d0,-(Sp)
  191.         moveq.l    #0,d0
  192.         move.b    $bfe001,d0
  193.         btst    #1,d0
  194.         beq    .No
  195.         move.w    #%00110011,B3t
  196.         bra.w    .Ok
  197. .No        move.w    #%00110111,B3t
  198. .Ok        bsr.w    Refresh_Window
  199.         move.l    (Sp)+,d0
  200.         rts
  201.  
  202.  
  203. Patch_Functions
  204.         bsr.w    Search_Floppys
  205.         move.l    #UnLoadsegroutine,d0
  206.         move.l    #_LVOUnLoadseg,a0
  207.         bsr.w    Setfunction
  208.         move.l    d0,Old_UnLoadsegadr
  209.  
  210.         move.l    #Loadsegroutine,d0
  211.         move.l    #_LVOLoadseg,a0
  212.         bsr.w    Setfunction
  213.         move.l    d0,Old_Loadsegadr
  214.  
  215.         move.l    #Openroutine,d0
  216.         move.l    #_LVOOpen,a0
  217.         bsr.w    Setfunction
  218.         move.l    d0,Old_Openadr
  219.  
  220.         move.l    #Examineroutine,d0
  221.         move.l    #_LVOExamine,a0
  222.         bsr.w    Setfunction
  223.         move.l    d0,Old_Examineadr
  224.  
  225.         move.l    #Exnextroutine,d0
  226.         move.l    #_LVOExnext,a0
  227.         bsr.w    Setfunction
  228.         move.l    d0,Old_Exnextadr
  229.  
  230.         move.l    #Deleteroutine,d0
  231.         move.l    #_LVODeletefile,a0
  232.         bsr.w    Setfunction
  233.         move.l    d0,Old_Deleteadr
  234.  
  235.         move.l    #Lockroutine,d0
  236.         move.l    #_LVOLock,a0
  237.         bsr.w    Setfunction
  238.         move.l    d0,Old_Lockadr
  239.  
  240.         move.l    #DupLockroutine,d0
  241.         move.l    #_LVODupLock,a0
  242.         bsr.w    Setfunction
  243.         move.l    d0,Old_DupLockadr
  244.  
  245.         move.l    #UnLockroutine,d0
  246.         move.l    #_LVOUnLock,a0
  247.         bsr.w    Setfunction
  248.         move.l    d0,Old_Unlockadr
  249.  
  250.         move.l    #Openlibraryroutine,d0
  251.         move.l    #_LVOOpenlibrary,a0
  252.         bsr.w    Setfunction
  253.         move.l    d0,Old_Openlibadr
  254.  
  255.         move.l    #Readroutine,d0
  256.         move.l    #_LVORead,a0
  257.         bsr.w    Setfunction
  258.         move.l    d0,Old_Readadr
  259.  
  260.         move.l    #WriteRoutine,d0
  261.         move.l    #_LVOWrite,a0
  262.         bsr.w    Setfunction
  263.         move.l    d0,Old_Writeadr
  264.  
  265.         move.l    #Closeroutine,d0
  266.         move.l    #_LVOClose,a0
  267.         bsr.w    Setfunction
  268.         move.l    d0,Old_Closeadr
  269.  
  270.         move.l    #Closelibraryroutine,d0
  271.         move.l    #_LVOCloselibrary,a0
  272.         bsr.w    Setfunction
  273.         move.l    d0,Old_Closelibadr
  274.         rts
  275.  
  276. DePatch_Functions
  277.         move.l    Old_Unloadsegadr(pc),d0
  278.         move.l    #_LVOUnloadseg,a0
  279.         bsr.w    Setfunction
  280.  
  281.         move.l    Old_Loadsegadr(pc),d0
  282.         move.l    #_LVOLoadseg,a0
  283.         bsr.w    Setfunction
  284.  
  285.         move.l    Old_Openadr(pc),d0
  286.         move.l    #_LVOOpen,a0
  287.         bsr.w    Setfunction
  288.  
  289.         move.l    Old_Readadr(pc),d0
  290.         move.l    #_LVORead,a0
  291.         bsr.w    Setfunction
  292.  
  293.         move.l    Old_Writeadr(pc),d0
  294.         move.l    #_LVOWrite,a0
  295.         bsr.w    Setfunction
  296.  
  297.         move.l    Old_Deleteadr(pc),d0
  298.         move.l    #_LVODeletefile,a0
  299.         bsr.w    Setfunction
  300.  
  301.         move.l    Old_Lockadr(pc),d0
  302.         move.l    #_LVOLock,a0
  303.         bsr.w    Setfunction
  304.  
  305.         move.l    Old_UnLockadr(pc),d0
  306.         move.l    #_LVOUnLock,a0
  307.         bsr.w    Setfunction
  308.  
  309.         move.l    Old_Closeadr(pc),d0
  310.         move.l    #_LVOClose,a0
  311.         bsr.w    Setfunction
  312.  
  313.         move.l    Old_Openlibadr(pc),d0
  314.         move.l    #_LVOOpenlibrary,a0
  315.         bsr.w    Setfunction
  316.  
  317.         move.l    Old_Closelibadr(pc),d0
  318.         move.l    #_LVOCloselibrary,a0
  319.         bsr.w    Setfunction
  320.  
  321.         move.l    Old_Duplockadr(pc),d0
  322.         move.l    #_LVODuplock,a0
  323.         bsr.w    Setfunction
  324.  
  325.         move.l    Old_Examineadr(pc),d0
  326.         move.l    #_LVOExamine,a0
  327.         bsr.w    Setfunction
  328.  
  329.         move.l    Old_Exnextadr(pc),d0
  330.         move.l    #_LVOExnext,a0
  331.         bsr.w    Setfunction
  332.         rts
  333.  
  334.  
  335. ;==============================================================================
  336. ;         Functions that shall Set the Led-option                  
  337. ;==============================================================================
  338. LoadsegRoutine
  339.         move.l    Old_Loadsegadr(pc),a0
  340.         jsr    (a0)
  341.         cmp.w    #1,StatusFlg
  342.         bge.w    .No
  343.         move.w    #%00110011,B1t
  344.         bsr    Refresh_Window
  345. .No        rts
  346.  
  347. ExamineRoutine
  348.         move.l    Old_Examineadr(pc),a0
  349.         jsr    (a0)
  350.         cmp.w    #1,StatusFlg
  351.         bge.w    .No
  352.         move.w    #%00110011,B1t
  353.         bsr    Refresh_Window
  354. .No        rts
  355.  
  356. ExnextRoutine
  357.         move.l    Old_Exnextadr(pc),a0
  358.         jsr    (a0)
  359.         cmp.w    #1,StatusFlg
  360.         bge.w    .No
  361.         eor.w    #%00000100,B1t
  362.         bsr    Refresh_Window
  363. .No        rts
  364.  
  365. LockRoutine
  366.         move.l    d1,Lockpath
  367.         move.l    Old_Lockadr(pc),a0
  368.         jsr    (a0)
  369.         movem.l    d0-d7/a0-a6,-(Sp)
  370.         bsr.w    Search_Floppys
  371.         movem.l    (Sp)+,d0-d7/a0-a6
  372.         cmp.w    #1,StatusFlg
  373.         bge.w    .No
  374.         move.w    #%00110011,B1t
  375.         bsr.w    Refresh_Window
  376. .No        rts
  377.  
  378. DupLockRoutine
  379.         move.l    Old_DupLockadr(pc),a0
  380.         jsr    (a0)
  381.         cmp.w    #1,StatusFlg
  382.         bge.w    .No
  383.         move.w    #%00110011,B1t
  384.         bsr.w    Refresh_Window
  385. .No        rts
  386.  
  387. OpenRoutine
  388.         move.l    Old_Openadr(pc),a0
  389.         jsr    (a0)
  390.         cmp.w    #1,StatusFlg
  391.         bge.w    .No
  392.         move.w    #%00110011,B1t
  393.         bsr.w    Refresh_Window
  394. .No        rts
  395.  
  396. ReadRoutine
  397.         move.l    Old_Readadr(pc),a0
  398.         jsr    (a0)
  399.         cmp.w    #1,StatusFlg
  400.         bge.w    .No
  401.         move.w    #%00110011,B1t
  402.         bsr.w    Refresh_Window
  403. .No        rts
  404.  
  405. WriteRoutine
  406.         move.l    Old_Writeadr(pc),a0
  407.         jsr    (a0)
  408.         cmp.w    #1,StatusFlg
  409.         bge.w    .No
  410.         move.w    #%00110011,B1t
  411.         bsr.w    Refresh_Window
  412. .No        Rts
  413.  
  414. DeleteRoutine
  415.         move.l    Old_Deleteadr(pc),a0
  416.         jsr    (a0)
  417.         cmp.w    #1,StatusFlg
  418.         bge.w    .No
  419.         move.w    #%00110011,B1t
  420.         bsr.w    Refresh_Window
  421. .No        rts
  422.  
  423. OpenlibraryRoutine
  424.         move.l    Old_Openlibadr(pc),a0
  425.         jsr    (a0)
  426.         cmp.w    #1,StatusFlg
  427.         bge.w    .No
  428.         move.w    #%00110011,B1t
  429.         bsr.w    Refresh_Window
  430. .No        rts
  431.  
  432. ;==============================================================================
  433. ;         Functions that shall restore the Led-option              
  434. ;==============================================================================
  435. UnLoadsegRoutine
  436.         move.l    Old_UnLoadsegadr,a0
  437.         jsr    (a0)
  438.         cmp.w    #1,StatusFlg
  439.         bge.w    .No
  440.         move.w    #%00110111,B1t
  441.         bsr.w    Refresh_Window
  442. .No        rts
  443.  
  444. UnlockRoutine
  445.         move.l    Old_Unlockadr,a0
  446.         jsr    (a0)
  447.         cmp.w    #1,StatusFlg
  448.         bge.w    .No
  449.         move.w    #%00110111,B1t
  450.         bsr.w    Refresh_Window
  451. .No        rts
  452.  
  453. CloseRoutine
  454.         move.l    Old_Closeadr,a0
  455.         jsr    (a0)
  456.         cmp.w    #1,StatusFlg
  457.         bge.w    .No
  458.         move.w    #%00110111,B1t
  459.         bsr.w    Refresh_Window
  460. .No        rts
  461.  
  462. CloselibraryRoutine
  463.         move.l    Old_Closelibadr,a0
  464.         jsr    (a0)
  465.         cmp.w    #1,StatusFlg
  466.         bge.w    .No
  467.         move.w    #%00110111,B1t
  468. .no        rts
  469.  
  470. SetFunction
  471.         move.l    _Dosbase(pc),a1
  472.         move.l    _SysBase(pc),a6        ; Use The Multitasking Executive..:-)
  473.         jsr    _LVOSetFunction(a6)    ;               ----
  474.         rts
  475.  
  476. Search_Floppys
  477.         move.l    Lockpath(pc),a0
  478.         lea.l    .Tmp(pc),a1
  479.         moveq.l    #0,d0        ; Convert the first char to lowercase
  480.         move.b    (a0),d0
  481.         bset    #5,d0
  482.         move.b    d0,(a1)+
  483.         moveq.l    #0,d0        ; Convert the second char to lowercase
  484.         move.b    1(a0),d0
  485.         bset    #5,d0
  486.         move.b    d0,(a1)+
  487.         moveq.l    #0,d0        ; Convert the third char to lowercase
  488.         move.b    2(a0),d0
  489.         bset    #5,d0
  490.         move.b    d0,(a1)+
  491.  
  492.         cmp.l    #'df0',.Tmp
  493.         beq.w    .Found1
  494.  
  495.         cmp.l    #'df1',.Tmp
  496.         beq.w    .Found2
  497.  
  498.         cmp.l    #'ram',.Tmp
  499.         beq.w    .Found2
  500.  
  501.         Move.w    #0,StatusFlg
  502.         Rts                ; Not Found
  503. .Found1        Move.w    #1,StatusFlg        ; Tool shall only react on Df0: floppy
  504.         Rts
  505. .Found2        Move.w    #2,StatusFlg        ; Ahh, Tool shall not react at all..
  506.         Rts
  507. .Tmp        Dc.l    0
  508.  
  509. ;==============================================================================
  510. ;            Show the about box.
  511. ;==============================================================================
  512. About_Diskled    move.l    _ReqtoolsBase(Pc),a6
  513.         move.l    #Main_Taglist,a0
  514.         move.l    #Main_Request,a1
  515.         move.l    #Main_Options,a2
  516.         move.l    #0,a3
  517.         move.l    _ReqtoolsBase(Pc),a6
  518.         jsr    _LvoRtEzRequesta(a6)
  519.         rts
  520. ;==============================================================================
  521.         even
  522. Main_Name    dc.b    " DiskLED V1.2 ",0
  523.         even
  524. Main_Request    dc.b    ' DiskLED V1.2 ',10
  525.         dc.b    ' °°°°°°°°°°°° ',10
  526.         dc.b    ' Created and designed by: ',10
  527.         dc.b    ' Olle / Latex',10,10
  528.         dc.b    ' olle@ltx.nu or at www.ltx.nu',10
  529.         dc.b    ' Reqtools © Nico François ',0
  530.         even
  531. Main_Options    dc.b    " _Okidoki",0
  532.         even
  533. Main_Taglist    dc.l    Rt_Underscore,'_'
  534.         dc.l    RTEZ_ReqTitle,Main_Name
  535.         dc.l    RTEZ_Flags,EzReqf_Centertext
  536.         dc.l    RT_PubScrName,Win0scr
  537.         dc.l    0
  538.         even
  539. ;==============================================================================
  540. ;                  Variables & Constants
  541. ;==============================================================================
  542. CIABPRB            =    $BFD100
  543. XPos            dc.w    0        ; Window Xpos
  544. YPos            dc.w    0        ; Window Ypos
  545. Old_Examineadr        dc.l    0
  546. Old_Exnextadr        dc.l    0
  547. Old_Lockadr        dc.l    0
  548. Old_Duplockadr        dc.l    0
  549. Old_Unlockadr        dc.l    0
  550. Old_Openadr        dc.l    0
  551. Old_Readadr        dc.l    0
  552. Old_Writeadr        dc.l    0
  553. Old_Deleteadr        dc.l    0
  554. Old_Openlibadr        dc.l    0
  555. Old_Closeadr        dc.l    0
  556. Old_Closelibadr        dc.l    0
  557. Old_Loadsegadr        dc.l    0
  558. Old_UnLoadsegadr    dc.l    0
  559. Old_Exalladr        dc.l    0
  560. Old_ExallEndadr        dc.l    0
  561. Done            dc.l    0        ; Set to 1 to quit
  562. Lockpath        Dc.l    0
  563. StatusFlg        Dc.w    0        ; Status for drives
  564. ConfigFName        dc.b    'S:DLED.CFG',0
  565.             even
  566. ;==============================================================================
  567.  
  568.  
  569. ;============================================
  570. ;         Dos LinkObject
  571. ;============================================
  572.         Xdef    _Dos_Openfile         ; D0=Ptr to filename
  573.         Xdef    _Dos_Closefile         ; N/A
  574.         Xdef    _Dos_Read         ; D2=DestPtr,D3=Length
  575.         Xdef    _Dos_Write         ; D2=DestPtr,D3=Length
  576.         Xdef    _Dos_Delete         ; D1=File to delete
  577.         Xdef    _Dos_Execute         ; D1=File to execute
  578.         Xdef    _Dos_Delay         ; D1=Time to wait (D1*50tps) (ticks per second)
  579.         Xdef    _Dos_Getsize         ; D1=FileName,Ret:D0=Size
  580.         Inclink    Dos.lnk
  581. ;============================================
  582.  
  583.         include    WinDesigner.i
  584.  
  585.         section    bss,bss_p
  586.  
  587. ConfigBuffer    ds.b    1024
  588. PublicName    ds.b    256
  589.